package com.example.leetcode.leetcode.hot100;

/**
 * @author haitao
 * @date 2021/7/15 3:55 下午
 * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
 * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
 * 注意：给定 n 是一个正整数。
 *           4
 *         /  \
 *        3    2
 *       /\    /\
 *      2 1   1 0
 *     /\ /\ /\
 *    1 00 -11 -1
 *   /
 *  0
 */
public class Solution70 {

    public int total = 0;
    public int climbStairs(int n) {
        recursion(n);
        return total;
    }
    public void recursion(int n){
        if(n<0){
            return;
        }
        if(n==0){
            total++;
            return;
        }
        recursion(n-1);
        recursion(n-2);
    }


    //动态规划
    public int climbStairs1(int n) {
       int prefix = 1;
       int prefixPre = 1;
       int total = 0;
       for (int i = 2; i <= n; i++) {
        total = prefix+ prefixPre;
        prefixPre = prefix;
        prefix = total;
       }
       return total;
    }


    public static void main(String[] args) {
        Solution70 solution70 = new Solution70();
        System.out.println(solution70.climbStairs(1));
        System.out.println(solution70.climbStairs1(3));
    }
}
